#pragma once
#include "igamescreen.h"
#include "IRenderer.h"
#include "IGame.h"
#include "IScreenManager.h"
class ScreenManager;
class GameScreen : public IGameScreen
{
public:
	GameScreen(void);
	virtual ~GameScreen(void);

	virtual void OnScreenRemoved();
	virtual void OnScreenRemoveRequest();
	virtual bool ScreenInit(IGame *pGame);
	virtual void Update();
	virtual void Render();
	virtual std::string GetInternalName();
	virtual void OnKeyPress(uint key);
	virtual void OnKeyRelease(uint key);
	virtual IGame *GetGame();
	virtual IRenderer *GetRenderer();
	virtual IScreenManager *GetScreenManager();
protected:
	IGame *m_pGame;
	IRenderer *m_pRenderer;
	IScreenManager *m_pScreenManager;

public:
	bool _bBlockInput(); //Does this screen block input from the screen(s) below it
	bool _bUpdate(); //Does this screen allow being updated
	bool _bAcceptInput(); //Does this screen accept input
	bool _bBlockUpdate(); //DOes this screen block screens below it from being updated
	bool _bDraw();
protected:
	bool m_bAcceptInput;
	bool m_bBlockInput;
	bool m_bUpdate;
	bool m_bBlockUpdate;
	bool m_bDraw;
};

